const express = require('express')
const app = express()
const port = 3000
const Mock = require('mockjs');
//中间件,为req提供body属性获得参数
const bodyParser = require('body-parser')
    // 处理静态资源
app.use(express.static('public'))
    // 处理请求参数
    // bodyParser提供接受json请求参数的支持
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// 设置允许跨域访问该服务
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, Access-Control-Allow-Credentials");
    res.header("Access-Control-Allow-Credentials", "true");
    if (req.method == "OPTIONS") {
        res.sendStatus(200);
    } else {
        next();
    }
});

app.get('/', (req, res) => res.send('Hello World!'));

app.get('/test', (req, res) => res.send('Hello Vs Code!'))

app.get('/fecth', (req, res) => res.send('Hello Fecth!'))


app.get('/jq01', (req, res) => {
    setTimeout(function() {
        res.send('Hello JQ01!')
    }, 1000)
})


app.get('/jq02', (req, res) => {
    setTimeout(function() {
        res.send('Hello JQ02!')
    }, 3000)
})

app.get('/jq03', (req, res) => {
    setTimeout(function() {
        res.send('Hello JQ03!')
    }, 2000)
})



//通过mockjs生成伪数据
app.get('/mock', function(req, res) {
    /**
     * mockjs中属性名‘|’符号后面的属性为随机属性，数组对象后面的随机属性为随机数组数量，正则表达式表示随机规则，+1代表自增
     */
    res.json(Mock.mock({
        "status": 200,
        "data|1-9": [{
            "name|5-8": /[a-zA-Z]/,
            "id|+1": 1,
            "value|0-500": 20
        }]
    }));
});

// 拓展mockjs,生成一个随机的手机号码
Mock.Random.extend({
    phone: function() {
        var phonePrefixs = ['132', '135', '189'] // 自己写前缀哈
        return this.pick(phonePrefixs) + Mock.mock(/\d{8}/) //Number()
    }
});

const emps=Mock.mock({
    "status": 200,
    "data|5-10": [{
        "id|+1": 1,
        "name": '@CNAME', //随机生成一个中文的姓名
        'idcard': '@ID', //id必须大写,生成一个18位的身份证号码
        'hiredate': '@DATE', //入职时间
        'address': '@CITY(true)',
        'email': '@EMAIL',
        'phone': '@PHONE',
        "salary|4000-20000": 1
    }]
});

/**fecth的RESTFul的案例 */

app.get('/emp',(req,res)=>{
    res.send('传统的URL传递参数!'+req.query.id)
});
//RESTFul的get获得参数
app.get('/emp/:id',(req,res)=>{
    res.send('get请求:RESTful传递参数!'+req.params.id)
});
//RestFul的delete请求
app.delete('/emp/:id',(req,res)=>{
    res.send('delete请求:RESTful传递参数!'+req.params.id)
});

//post请求
app.post('/emp',(req,res)=>{
    res.send('post请求:传递参数!'+req.body.name+":"+req.body.pwd)
});

//put请求
app.put('/emp/:id',(req,res)=>{
    res.send('put请求:传递参数!'+req.params.id+":"+req.body.name)
});

/**fecth的RESTFul的案例 */

/* fecth响应json格式的数据 */
app.get("/json/:id",(req,res)=>{
    let id=req.params.id;
    //根据id获得数据
    let lists= emps.data.filter(item=>item.id==id);
    //向客户端响应json格式的结果
    res.json(lists[0]);
});


app.get('/emps', function(req, res) {
    res.json(emps);
});

/* axios的案例 */
app.get('/adata',(req,res)=>{
    res.send("Hello axios");
});

app.get('/axios',(req,res)=>{
    res.send("axios get传统传参"+req.query.id);
});

app.get('/axios/:id',(req,res)=>{
    res.send("axios get RestFul 传参"+req.params.id);
});

app.delete('/axios/:id',(req,res)=>{
    res.send("axios delete RestFul 传参"+req.params.id);
});

app.post('/axios',(req,res)=>{
    res.send("axios post RestFul 传参"+req.body.name+":"+req.body.pwd);
});

app.put('/axios/:id',(req,res)=>{
    res.send("axios put RestFul 传参"+req.params.id+":"+req.body.name+":"+req.body.pwd);
});

app.get('/axios-emp/:id',(req,res)=>{
    let id=req.params.id;
    //根据id获得数据
    let lists= emps.data.filter(item=>item.id==id);
    //向客户端响应json格式的结果
    res.json(lists[0]);
});

/* async的演示 */
app.get("/async",(req,res)=> res.send('hao'));

app.get('/async2/:info',(req,res)=>{
    if(req.params.info=='hao'){
        res.send("ren");
    }else{
        res.send("error");
    }
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`))